package com.basker.pisces.domain.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import org.springframework.core.annotation.AliasFor;

import com.basker.pisces.core.query.builder.CriterionBuilder.Operator;
import com.basker.pisces.core.query.factory.SimpleQueryInfoBuilder;

/**
 * 表示字段的值为某一个条件
 *
 * @author hangwen
 * @see SimpleQueryInfoBuilder#fillQueryRequest(Object)
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(value = {ElementType.FIELD})
public @interface Condition {

    /**
     * 设置当前条件的排他条件，如果当前条件有效，排他条件就忽略
     *
     * @return
     */
    String[] exclusive() default {};

    /**
     * 条件符号，取{@link Operator}定义的符号
     *
     * @return
     * @see Operator
     */
    String operator() default "=";

    /**
     * 如果存在排他条件，那么优先级决定哪个条件优先判定
     *
     * @return
     */
    int priority() default -1;

    /**
     * 绑定的属性别名
     *
     * @return
     */
    @AliasFor("value")
    String propertyAlias() default "";

    @AliasFor("propertyAlias")
    String value() default "";
}
